package arithmetic;

import org.junit.Test;

/**
 * 区分一下操作，并且java的不同符号
 * 取余：   a%b     取余运算的符号是根据第一个运算数决定的  取余：rem(x,y)=x-y.*fix(x./y)    其中，fix()函数是向0取整，
 * 取模：   a&b                                          取模：mod(x,y)=x-y.*floor(x./y)  其中 ，floor()函数是向负无穷取整
 * 相除：   a/b   java 默认相除是向下取整
 *
 * 对于整数 a，b 来说，取模运算和取余运算的过程相同：
 *
 * 求整数商：c=a/b
 * 计算模或者余数：r=a−c×b
 * 只是取模和取余在第一步求商的方法上有所不同：取余运算在取 c 的值时，向 0 方向舍入( fix() 函数)；而取模运算在计算 c 的值时，向负无穷方向舍入( floor() 函数)。
 */
public class ModuleAndDivision {

    @Test
    public void test(){
        int a = 15 / 5;// 2
        int b = 5 % 5;//3
        int c = 5 / 13;//0
        int d = 5 % 13;//5
        double e = 13 / -5;//-2
        double f = -13 / 5;//-2
        int h = -13 % 5;//-2    -2.5
        int j = 13 % -5;//-2   -2.5

        int i = 13 & 5;// 2
        int k = 13 & -5;//3
        int m = 5 & 13;//0
        int n = -5 & 13;//5

        System.out.println("13 / 5="+a);
        System.out.println("5 % 5="+b);
        System.out.println("5 / 13="+c);
        System.out.println("5 % 13="+d);
        System.out.println("13 / -5="+e);
        System.out.println("-13 / 5="+f);
        System.out.println("-13 & 5="+h);
        System.out.println("13 & -5="+j);

        System.out.println("13 & 5="+i);
        System.out.println("13 & -5="+k);
        System.out.println("5 & 13="+m);
        System.out.println("-5 & 13="+n);
    }
}
